草庐IT

Android SurfaceView Canvas 用线程绘制

全部标签

javascript - setTimeout 或 setInterval 是否使用线程触发?

我一直在看这篇文章http://ejohn.org/blog/how-javascript-timers-work/以及setTimeout和setInterval以及按钮点击等其他异步任务如何让我有些困惑。我知道JS是单线程的,也就是说,据我所知,所有回调函数(又名事件处理程序)都将排队并按顺序执行。但是,请看下面我从上面链接的文章中截取的图片:每个block代表一些工作,并且-在大约10毫秒-计时器被触发。我知道它的回调函数被放在队列中供以后执行,但是为什么已经在执行某些事情时可以调用事件呢?是因为setTimeout()开始使用一个单独的线程来计算内部时间并触发其完成事件吗?请注

javascript - 在 map 上以米为单位绘制半径指定的圆

任何关于如何使用D3在地理map上绘制以米为单位的半径圆的指示都会非常有帮助。我尝试使用Leaflet,它是接受以米为单位的半径的Circle(或CircleMarker),但我需要更大的灵active来处理我的数据。D3似乎很有帮助,但我不确定如何在map顶部绘制给定半径的圆,这样圆覆盖与给定半径对应的区域(并适应缩放和投影变化)。 最佳答案 您可以使用最新版本的Leaflet以米为单位传递这些半径。半径将根据缩放级别而变化。这里有更多信息来自Leaflet'sdocumentationL.circle([lat,lng],rad

javascript - Javascript 或 jQuery 中的线程安全队列

我有许多异步AJAX调用,其结果将得到处理。处理发生的顺序无关紧要,但结果需要一次处理一个。所以我想简单地执行我的AJAX调用,它们都只是将结果放在一个队列中。然后应该在单个线程上处理该队列。这样,结果会尽快得到处理。执行此操作的最佳方法是什么?我正在使用jQuery,很高兴利用它为此提供的任何功能。 最佳答案 异步并不意味着“多线程”。考虑在处理第一个点击处理程序之前连续触发许多点击事件。一次只能处理一个Action,其他Action等待执行。像Javascript这样的事件驱动语言是在队列的基础上运行的。后台的Javascrip

javascript - D3.js 从单独的文件中绘制多个数据集

我正在尝试使用来自两个tsv文件的两组数据绘制散点图。但是,每个都以单一刻度共享x轴。有两个y轴,每个轴都有自己的刻度。我现在拥有的图表将在视觉上有所帮助。问题是,第二个数据集(橙色)仅部分绘制在a轴上约15,000处的污点处。它真的应该是一条更大的线。此外,当我运行它时,有时会呈现第二个数据集,而现在会呈现第一个数据集。不知道为什么会这样..这是两个(可能)相关的代码块://1stdatasetd3.tsv("datatest4.tsv",function(error,tsv1){tsv1.forEach(function(d){d.altit=+d.altit;d.tmp=+d.t

javascript - 绘制到 HTML 5 Canvas 的最快方法是什么?

我正在研究仅使用HTML的Canvas作为显示媒体制作游戏的可能性。以我需要完成的示例任务为例,我需要从多个等距图block构建游戏环境。当然,在2D中工作意味着它们必须采用矩形包装,因此图block之间有很大的重叠。我已经足够大了,这个问题的自然解决方案是调用BitBltMasked。哦等等,不,HTMLCanvas没有像BitBlt这样简单和令人愉悦的东西。似乎将像素数据转储到Canvas中的唯一方法是使用没有忽略alphachannel的有用绘图模式的drawImage()或使用在数组中具有图像数据的ImageData对象。使用权。是。界限。检查。和。所以。狗。慢。好吧,这与其说

javascript - JavaScript在浏览器中运行的单线程概念

下图摘自本书第3章SecretsoftheJavaScriptNinja乔恩·雷西格(JonResig)着。这里作者在讲解浏览器事件循环。这本书必须这样说:It’simportanttonotethatthebrowsermechanismthatputstheeventsontothequeueisexternaltothiseventloopmodel.Theprocessingnecessarytodeterminewheneventshaveoccurredandtopushthemontotheeventqueuedoesn’tparticipateinthethreadth

javascript - 在javascript中的另一个线程中运行代码

我想在页面上分离线程以防止gui卡住。为此,我正在运行一个函数,该函数将使用setTimeout将gui卡住在另一个线程中,但仍然卡住。代码和jsbin链接如下:$("#btn").on("click",function(){$("#div1").html(newDate());});$(document).ready(function(){setTimeout(function(){count();},1);});functioncount(){for(vari=0;i 最佳答案 即使您已通过setTimeout委托(delega

javascript设置间隔作为单独的线程运行?

我想使用计时器作为备用,以防我陷入无限循环。似乎设置间隔是执行此操作的正确方法。但是,它对我不起作用。根据我的研究,setInterval似乎应该在后台的单独线程中运行,但我没有看到。为什么会发生这种行为?我该如何解决这个问题?vartime=0;window.setInterval(function(){time++;},1000);while(true){//stuffdoneif(time>=5){break;}} 最佳答案 浏览器javascript在单线程中运行。因此,如果您执行的操作花费的时间太长-它会卡住浏览器。有关详

javascript - 在 D3 中绘制多边形数据的正确格式

我试过这些不同的方法,但似乎没有任何效果。这是我目前拥有的:varvis=d3.select("#chart").append("svg").attr("width",1000).attr("height",667),scaleX=d3.scale.linear().domain([-30,30]).range([0,600]),scaleY=d3.scale.linear().domain([0,50]).range([500,0]),poly=[{"x":0,"y":25},{"x":8.5,"y":23.4},{"x":13.0,"y":21.0},{"x":19.0,"y":1

javascript - 如何在没有 ctx.bezierCurveTo 的情况下使用原生 Javascript 代码绘制贝塞尔曲线?

我需要在没有ctx.bezierCurveTo方法的情况下使用原生Javascript绘制并获取每个步骤的贝塞尔曲线坐标。我找到了几个资源,但我很困惑。特别是this看起来很接近,但我无法清楚地实现。我怎样才能做到这一点? 最佳答案 您可以绘制贝塞尔曲线:bezier=function(t,p0,p1,p2,p3){varcX=3*(p1.x-p0.x),bX=3*(p2.x-p1.x)-cX,aX=p3.x-p0.x-cX-bX;varcY=3*(p1.y-p0.y),bY=3*(p2.y-p1.y)-cY,aY=p3.y-p0.